package web后端.会话跟踪.登录认证.登录标记.会话技术.Cookie;

/**
 * Cookie<p>
 * 详见项目<a href="#">springboot-session-tracking-cookie</a>的cookie1、cookie2方法<p></p>
 * 优点：是http协议中支持的技术<p>
 * 缺点：<p>
 * 1、移动端App无法直接使用Cookie<p>
 * 2、不安全（因为是存储在浏览器中），所以我们只能存储一些不敏感的数据，而且用户可以自己禁用Cookie<p>
 * 3、Cookie不能跨域<p>
 * 4、大小有限制，一般不超过4kb<p></p>
 * <p>
 * 跨域请求：<p>
 * 在前后端分离开发模式中，前端程序和后端程序是分别部署在两台服务器上的<p>
 * 若这两台服务器的协议、ip地址（域名）或端口号不同，我们在浏览器中是要先访问前端页面<p>
 * 前端页面要访问另一个服务器的接口（后端程序接口），这种情况就称为跨域请求<p></p>
 * 跨域区分三个维度：协议、IP/域名、端口<p></p>
 * <p>
 * 如何区分跨域操作：<p>
 * 只需要看当前所在地址和要请求的地址<p>
 * 只要这两个地址的协议、ip（域名）、端口号有一个不同，就是跨域操作<p>
 * 这时候服务器端设置一个Cookie，这个Cookie是不能用的
 */
public class index {
    /**
     * 以下“”起强调作用<p></p>
     * Cookie是一种客户端会话跟踪技术<p>
     * 它是存储在浏览器的<p>
     * 我们可以在浏览器第一次发起请求的时候来设置一个Cookie<p>
     * 比如：第一次发起的请求请求了登录接口，当它执行完后就可以设置一个Cookie<p>
     * 在Cookie中就可以存储一些相关的信息，如当前登录用户的用户名、id等信息<p>
     * 后续服务器端在给客户端响应的时候会 “<a href="#">自动</a>” 将储存的Cookie响应给浏览器<p>
     * 浏览器接收到Cookie之后，会 ”<a href="#">自动</a>“ 把这个Cookie的值存储到浏览器本地<p>
     * 在之后的每一次请求中，都会把本地储存的Cookie “<a href="#">自动</a>” 携带到服务端<p>
     * 接下来在服务端就可以获取到Cookie的值，然后对其进行判断<p>
     * 如果服务端这个Cookie不存在，就说明这个客户端没有访问过登录接口（也就是没有登录过）<p>
     * 反之则说明这个客户端已经登录过了<p>
     * 这样就可以根据Cookie在同一次会话的不同请求中进行数据共享<p></p>
     * <p></p>
     * 为什么一切都是自动的？<p>
     * 因为Cookie是http协议中所支持的技术，而各大浏览器厂商都支持了这一标准<p></p>
     * 在http协议中，为我们提供了一个响应头和一个请求头，分别是<p>
     * 响应头：Set-Cookie<p>
     * 请求头：Cookie<p></p>
     * <p>
     * 腾讯云开发者社区中对于Cookie和Set-Cookie的描述（网址：<a href="https://cloud.tencent.com/developer/doc/1117">腾讯云开发者社区HTTP</a>）：<p>
     * Cookie：<p>
     * HTTP 请求报头包含存储先前通过与所述服务器发送的 HTTP cookies ———— <a href="#"> Set-Cookie </a>头。<p>
     * 也就是说：请求头中所传递的就是服务器端之前发送回来的Cookie的信息，Cookie这个请求头，就是给服务器传递Cookie用的<p></p>
     * Set-Cookie：<p>
     * 所述 <a href="#"> Set-Cookie </a> HTTP响应报头被用于从服务器向用户代理发送 cookie。<p>
     * 也就是说：响应头的Set-Cookie中所传递的就是服务器端向浏览器发送的Cookie的信息<p></p>
     *
     * <a href="#"> Cookie </a>，就是以响应头的形式进行响应的，直接设置了一个响应头，名为<a href="#"> Set-Cookie </a><p>
     * 而<a href="#"> Set-Cookie </a>这个响应头对应的数据就是<a href="#"> Cookie </a>对应的值<p></p>
     * <p>
     * Set-Cookie响应头的格式：
     * <a href="#">Set-Cookie:name=value</a><p>
     * 其中，name是Cookie的名字，value是Cookie的值<p></p>
     * <p>
     * 这个响应头返回给浏览器时，浏览器会自动解析响应头<p>
     * 然后获取响应头的数据部分（name:value），也就是Cookie<p>
     * 然后将这个Cookie存储在浏览器本地<p>
     * 而在后续请求时，都会将浏览器中储存的Cookie值直接在请求头（通过Cookie请求头）携带到服务器<p></p>
     * 而在tomcat之类的web服务器中，都提供了Cookie操作的API，以便于设置和获取Cookie<p>
     * <p></p>
     * cookie鉴权原理<p>
     * 1.当客户端第一次访问服务器端时,服务器会成cookie信息,并且在响应头的Set-Cookie里面把生成的cookie信息发送给客户端<p>
     * 2.当客户端后续访问服务端的时候,那么客户端就会在请求头的cookie带上cookie信息,从而实现鉴权<p>
     *
     * @param args
     */
    public static void main(String[] args) {

    }
}
